 /*!
 * Collapsible, jQuery Plugin
 * jquery-timetinnel-1.0.js
 *
 * Copyright (c) 2014
 * author: Lian Heguo 
 *
 * Date: Wed Jun 12 16:18 2014
 */
;(function($){
	$.fn.checkCalender = function(options){
		var  defaultVal={
			defaultYear:"2014" ,			// 默认年
			titleData:"",			// 是否显示日期标题
			lang:"zh-cn",
			checkdata:[
				'2014-04-02',
				'2014-04-03',
				'2014-04-04',
				'2014-04-12',
				'2014-01-01'
			]
		
		};
		var options = $.extend(defaultVal,options);
		return this.each(function(){
			var self = $(this);// 取自身对象
			var className=[
				"fc-button",
				"fc-button-month",
				"fc-state-default",
				"offset"
				// "fc-corner-left",
				// "fc-corner-right"
			];
			function init(){			// 初始化
				var head="<div class='calendar-month'>";
				var i;
				for(i=0;i<12;i++){
					if(i<9){
						if(i==0){
							head+="<span class='"+className.join(" ")+' '+"' mark='"+(i+1)+"'>"+"0"+(i+1)+"</span>"
						}else{
							head+="<span class='"+className.join(" ")+"' mark='"+(i+1)+"'>"+"0"+(i+1)+"</span>"
						}	
					}else{
						if(i<11){
							head+="<span class='"+className.join(" ")+"' mark='"+(i+1)+"'>"+(i+1)+"</span>"
						}else{
							head+="<span class='"+className.join(" ")+' '+"' mark='"+(i+1)+"'>"+(i+1)+"</span>"
						}
						
					}
					head+="<label class='all-days' id='all-days"+(i+1)+"'><input type='checkbox' style='position:relative;top:2px;'/> 全选</label>"
				}
				head+="</div>"
				$(self).append(head);
				var j;
				var body="";
				for(j=0;j<12;j++){
					body="<div id='calendar"+(j+1)+"'></div>";
					$(self).append(body);
					var defaultTime=1;
					if(j<9){
						defaultTime = options.defaultYear+"-0"+(j+1)+"-01";
					}else{
					
						defaultTime = options.defaultYear+"-"+(j+1)+"-01";
					}
					$(self).find("#calendar"+(j+1)).fullCalendar({	// 输出日历
						lang:options.lang,
						header: {
							left:'',
							right:options.titleData
						},
						defaultDate:defaultTime
					});
				}
				$(self).find("div[id^=calendar]").hide();
				setChecked();		// 设置选中的checkbox
			};
			init();	// 执行初始化
			
			function setHoverMonth(){		// 月份按钮鼠标hover效果
				$(self).find("span").mouseover(function(){
					$(this).addClass("fc-state-hover");
				});
				$(self).find("span").mouseout(function(){
					$(this).removeClass("fc-state-hover");
				});
			}
			setHoverMonth();
			function setShowMonth(){					// 设置默认显示月份及切换月份
				var t= new Date().getMonth()+1;			// 获取当前日期月份
				$(self).find("span").eq(t-1).addClass("fc-state-active");
				$(self).find("#calendar"+t).show();
				$(self).find("#all-days"+t).show()
				$(self).find("span").click(function(){
					t=$(this).attr("mark");				// 获取当前span坐标
					$(this).addClass("fc-state-active").siblings().removeClass("fc-state-active");
					$(self).find("#calendar"+t).show().siblings(":not(:first)").hide();
					$(self).find("#all-days"+t).show().siblings(":not(span)").hide();
				});
			}
			setShowMonth();
			
			Array.prototype.remove=function(dx){	// 移除数组属性扩展方法
			if(isNaN(dx)||dx>this.length){return false;}
			for(var i=0,n=0;i<this.length;i++)
			{
			if(this[i]!=this[dx])
			{
			this[n++]=this[i]
			}
			}
			this.length-=1
			}
			Array.prototype.baoremove = function(dx){ 	// 移除数组属性扩展方法
				if(isNaN(dx)||dx>this.length){return false;} 
				this.splice(dx,1); 
			}
			var checkedTime= options.checkdata;
			function checkdata(){
				var n;
				$(self).find(".checkdata").bind("click",function(e){				// 未勾选状态
					if($(this).is(":checked")){
						checkedTime.push($(this).attr("data"));	
					}else{	// 勾选状态
						for(n=0;n<checkedTime.length;n++){	// 循环确定下标
							if(checkedTime[n]==$(this).attr("data")){
								checkedTime.remove(n);
								break;
							}
						}	
					}
					
				});
				var k;
				$(self).find(".all-days input").bind("click",function(){// 月全选
					var  litleDays = $(self).find("div[id^=calendar]:visible .checkdata:not(:checked)"); // 不包括选中的
					var  allDays = $(self).find("div[id^=calendar]:visible .checkdata");
					var  tableHeader = $(self).find("div[id^=calendar]:visible .header");// 日历表头
					if($(this).is(":checked")){
						tableHeader.find(".checkweek").each(function(){
							this.checked=true;
						});
						litleDays.each(function(){
							checkedTime.push($(this).attr("data"));	
							this.checked=true;
						});
					}else{
						tableHeader.find(".checkweek").each(function(){
							this.checked=false;
						});
						allDays.each(function(){
							for(k=0;k<checkedTime.length;k++){	// 循环确定下标
								if(checkedTime[k]==$(this).attr("data")){
									checkedTime.remove(k);
								}
							}		
							this.checked=false;
						});
					}
				
				});
				var m;
				$(self).find(".checkweek").bind("click",function(){// 周全选
					var strWeek=$(this).parents("th").attr("week");
					var  litleWeek = $(self).find("div[id^=calendar]:visible ."+strWeek+" .checkdata:not(:checked)"); // 不包括选中的
					var  allWeek = $(self).find("div[id^=calendar]:visible ."+strWeek+" .checkdata");
					
					if($(this).is(":checked")){
						 litleWeek.each(function(){
							checkedTime.push($(this).attr("data"));	
							this.checked=true;
						});
					}else{
						allWeek.each(function(){
							for(m=0;m<checkedTime.length;m++){	// 循环确定下标
								if(checkedTime[m]==$(this).attr("data")){
									checkedTime.remove(m);
								}
							}		
							this.checked=false;
						});
					}
				});
				return checkedTime;
			}
			checkdata();
			
			
			
			$.fn.getCheckedData = function(){		// 建立数据接口
				return checkedTime; 
			}
			function setChecked(){	// 设置选中的checkbox
				var k;
				for(k=0;k<options.checkdata.length;k++){
				$(self).find('input[data='+options.checkdata[k]+']').attr("checked","checked");
				}
			}
			$.fn.resetData = function(arr){		// 建立数据接口
				if(arr instanceof Array){
					$(self).find('input:checkbox').each(function(){
						this.checked=false;
					});
					var k;
					for(k=0;k<arr.length;k++){
						$(self).find('input[data='+arr[k]+']')[0].checked=true;
					}
					checkedTime = arr;
				}else if(arr==null || arr=="undefined"){
					$(self).find('input:checkbox').each(function(){
						this.checked=false;
					});
					checkedTime =[];
				}
				
				return checkedTime; 
			}
			
			
		});

	};
})(jQuery);